package com.cskaoyan.ribbon.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * 创建日期: 2023/01/05 15:05
 *
 * @author ciggar
 */
@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    /**
     * 添加了@LoadBalanced注解之后，相当于Ribbon对RestTemplate增加了一个拦截器
     *
     * 这个拦截器其实就是做如下的动作：
     * 1. 从restTemplate取出调用的 url，然后取出 这个url中的uri
     * 2. 这个uri其实就是服务集群的名字，那么 Ribbon就可以根据这个服务集群的名字，从注册中心获取该服务
     *    集群的服务实例列表
     *
     * 3. 根据Ribbon负载均衡策略，从服务实例列表中，选择出一个合适的服务实例
     * 4. 取到这个服务实例的 uri，然后对原来的url进行替换
     */

    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
